iT邦幫忙

2023 iThome 鐵人賽

DAY 22
1
SideProject30

製作適用於網頁的台灣登山地圖系列 第 22

[Day22] 修改登山路徑

  • 分享至 

  • xImage
  •  

在原本基於 OpenMapTiles 的 Style 之中,山區路徑都以白色來標示:
origin

可以看到,白色的標線不太明顯,而且樣式還很單一,來看看可以怎麼改進。

處理 OSM tag

我們在 Day9 曾提過,登山路線的分級在 OSM 中可以用以下方式標注:

sac_scale: 路線分級,demanding_alpine_hiking 或 difficult_alpine_hiking 可以被視為需要繩索裝備的困難路線
trail_visibility: 路徑的可見度,許多獵路或較少人經過的路徑都不太容易被辨識,因此可以被認定為是困難路線。

因此可以在 Lua 設定檔中,可以將道路物件加入這些屬性:

if way:Holds("trail_visibility") then 
  way:Attribute("trail_visibility", way:Find("trail_visibility")) 
end
if way:Holds("sac_scale") then 
  way:Attribute("sac_scale", way:Find("sac_scale")) 
end

修改 Style

原本用於展示山區步道的圖層:

    {
      "id": "road_path",
      "type": "line",
      "source": "openmaptiles",
      "source-layer": "transportation",
      "filter": [
        "all",
        ["==", "$type", "LineString"],
        ["in", "class", "path", "track"]
      ],
      "layout": {"line-cap": "square", "line-join": "bevel"},
      "paint": {
        "line-color": "hsl(0, 0%, 97%)",
        "line-dasharray": [1, 1],
        "line-width": {"base": 1.55, "stops": [[4, 0.25], [20, 10]]}
      }
    },

可以看到,顏色僅有白色。而且在線段寬度(line-width)上面使用 Maplibre Style 中的 interpolate 表示法。在 z4 的縮放層級上僅有 0.25,在 z20 則變為 10

有關於這兩點,我們可以訂出以下規則:

  1. trail_visibility 的值為 bad, nohorrible,則認定為艱難路線,將顏色以淺色表示
  2. sac_scale 的值為 demanding_alpine_hikingdifficult_alpine_hiking,則也認定為艱難路線,將顏色以淺色表示
  3. 普通的路線以紅色表示,讓閱讀者可以看得清楚點
  4. 從縮放層級 z13 開始顯示登山路線,線段寬度為2,讓它明顯一點

接著就可以改寫上面的圖層為:

    {
      "id": "road_path",
      "type": "line",
      "source": "openmaptiles",
      "source-layer": "transportation",
      "filter": [
        "all",
        ["==", "$type", "LineString"],
        ["in", "class", "path", "track"]
      ],
      "layout": {"line-cap": "square", "line-join": "bevel"},
      "paint": {
        "line-color": [
          "case",
          ["in", ["get", "trail_visibility"], ["literal", ["bad", "no", "horrible"]]],
          "rgba(0, 0, 0, 0.4)",
          ["in", ["get", "sac_scale"], ["literal", ["demanding_alpine_hiking", "difficult_alpine_hiking"]]],
          "rgba(0, 0, 0, 0.4)",
          "rgba(215, 6, 0, 1)"
        ],
        "line-dasharray": [3, 1],
        "line-width": {"base": 1.55, "stops": [[13, 2], [20, 10]]}
      }
    }

可以看到,在 line-color 使用了 Maplibre Style 中的 case 表達式,來分別設定不同情況下的顏色。其結果為:
result

可以觀察到,阿玉山週邊的路徑明顯多了,困難路線也被以淺色表示。

對照到手機上使用的魯地圖,是不是也有幾分相似呢?
rudymap

結語

今天只是簡單依照屬性,分別將路徑重新重色而已。

地圖樣式往往需要經過反覆修改,才能在視覺上妥善呈現想讓讀者迅速了解的資訊。這時可以套用名為 sprite 的 icon set,來表示更多點位的資訊(若有時間,會在後面的系列文提到)。

例如困難路線,若想呈現更濃厚的警告意味,在路徑上加註個骷髏頭會有不錯的效果:
skull


上一篇
[Day21] 加入手機通訊點
下一篇
[Day23] Maplibre Style 中的表達式
系列文
製作適用於網頁的台灣登山地圖25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言